#include<iostream>
#include<vector>
#include<string
using namespace std;


class Solution {
public:
    int minDistance(string word1, string word2) {
        int len1 = word1.size();
        int len2 = word2.size();

        vector<vector<int>> dp;
        for (int i = 0; i <= len1; i++) {
            vector<int> tmp;
            for (int j = 0; j <= len2; j++) {
                if (i == 0) {
                    tmp.push_back(j);
                }
                else if (j == 0) {
                    tmp.push_back(i);
                }
                else tmp.push_back(0);
            }
            dp.push_back(tmp);
        }

        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {
                if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1];
                else {
                    dp[i][j] = 1 + min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]);
                }
            }
        }
        return dp[len1][len2];
    }
};